/*
 * IndiceResultado.cpp
 *
 *  Created on: May 21, 2012
 *      Author: lucasj
 */

#include "IndiceResultado.h"

ResultIndex::IndiceResultado::IndiceResultado() {


}

ResultIndex::IndiceResultado::~IndiceResultado() {

}

void ResultIndex::IndiceResultado::SetElem(int &cod, const std::string &dimension) {
	this->map.insert(std::pair<int, std::string>(cod, dimension));
}

// Funcionamiento ObtenerDatos:
// Recibe como parámetro la cantidad de definiciones
// que el usuario recibe en la consulta. Con este valor
// busca en el índice cual se repite cantValores veces.
// El valor resultante es el que cumple con los
// requisitos de la consulta.

void ResultIndex::IndiceResultado::ObtenerDatos(int cantValores, std::list<int> &listaResultados) {
	iteradorResultado it = this->map.begin();
	iteradorResultado valorActual = this->map.begin();
	int coincidencias = 0;
	while (it != this->map.end()) {
		if (it->first == valorActual->first) {
			++coincidencias;
			if (coincidencias == cantValores) {
				listaResultados.push_front(valorActual->first);
			}
			++it;
		} else {
			valorActual = it;
			coincidencias = 0;
		}
	}
}

std::ostringstream& ResultIndex::operator<<(std::ostringstream& oss, ResultIndex::IndiceResultado &indice) {
	iteradorResultado it;
	for (it = indice.map.begin(); it != indice.map.end(); ++it) {
		std::cout << it->first << " ";
		std::cout << it->second << std::endl;
	}
	return oss;
}


